import logging
import os
from datetime import datetime
from src.utils.get_project_root import get_project_root


def get_logger(name: str = "pytest", log_level: str = "INFO") -> logging.Logger:
    """
    获取配置好的日志记录器
    :param name: 日志名称（通常是模块名）
    :param log_level: 日志级别（DEBUG/INFO/WARNING/ERROR/CRITICAL）
    """
    logger = logging.getLogger(name)
    logger.setLevel(log_level.upper())

    # 避免重复添加handler（防止日志重复打印）
    if not logger.handlers:
        # 日志格式
        formatter = logging.Formatter(
            "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
            datefmt="%Y-%m-%d %H:%M:%S"
        )

        # 控制台输出
        console_handler = logging.StreamHandler()
        console_handler.setFormatter(formatter)
        logger.addHandler(console_handler)

        # 文件输出（可选）
        log_dir = get_project_root() / "logs"
        os.makedirs(log_dir, exist_ok=True)
        file_handler = logging.FileHandler(
            filename=os.path.join(log_dir, f"{datetime.now().strftime('%Y%m%d')}.log"),
            encoding="utf-8"
        )
        file_handler.setFormatter(formatter)
        logger.addHandler(file_handler)

    return logger
